Skip to content

Amelioration php fix 1.4.0#3

Open
thierry-laval wants to merge 2 commits intoShiiigen:mainfrom
thierry-laval:amelioration-php-fix-1.4.0
Open

Amelioration php fix 1.4.0#3
thierry-laval wants to merge 2 commits intoShiiigen:mainfrom
thierry-laval:amelioration-php-fix-1.4.0

Conversation

@thierry-laval
Copy link
Copy Markdown

🛠️ prestashop-fix.sh — Description étendue

📌 But du script

Ce script automatise la génération / mise à jour d'un fichier .htaccess et la création d'un php.ini pour des sites PHP (WordPress / PrestaShop). Il vise à offrir :

  • une méthode sûre et atomique d'écriture du .htaccess,
  • une sauvegarde automatique de l'ancien .htaccess,
  • une génération d'un php.ini minimal et réutilisable,
  • une ergonomie CLI (mode non interactif possible, dry-run).

Il a été adapté pour être plus portable (Linux/macOS/BSD) et plus sûr en production.


🧭 Principales améliorations apportées

  • 🔐 Robustesse : set -euo pipefail + IFS restreint pour éviter des comportements imprévus liés aux erreurs ou aux variables non définies.
  • 🪪 Sauvegarde : l'ancien .htaccess est renommé en .htaccess.bak.<timestamp> avant toute écriture.
  • 🔁 Écriture atomique : on écrit d'abord dans un fichier temporaire (fonction mktemp_portable) puis on remplace .htaccess par un mv atomique — minimise le risque d'état incomplet.
  • ♻️ Portabilité : mktemp_portable() prend en charge les différences de comportement de mktemp entre GNU et BSD (macOS).
  • 🧭 Entrée PHP flexible : accepte 7.4 ou 74 et normalise vers 74. Validation stricte des versions prises en charge.
  • 🧰 CLI et automatisation :
    • -n, --dry-run : simulation sans écrire ;
    • -v, --version <ver> : fournir la version PHP en non interactif ;
    • -h, --help : aide.
  • ⚠️ Sécurité du php.ini : le php.ini est généré avec les extensions commentées par défaut pour éviter d'activer des modules inexistants qui provoqueraient des erreurs au démarrage.
  • 🧹 Nettoyage : suppression conditionnelle de phpver.sh (si présent).

📂 Contenu produit

  • .htaccess : contient
    • directives SetHandler / AddHandler pour sélectionner la version PHP (p.ex. application/x-httpd-php74),
    • directive suPHP_ConfigPath /chemin/absolu/php.ini,
    • blocs WordPress standard (si wp-config.php est détecté).
  • php.ini : fichier minimal contenant timezone, limites, et une liste d'extensions commentées.

⚙️ Détail technique (section par section)

1. En-tête et sécurité

  • set -euo pipefail : coupe le script à la moindre erreur, empêche l'utilisation de variables non initialisées et fait échouer les pipelines si une commande échoue.
  • IFS=$'\n\t' : évite que les espaces cassent les boucles/reads.

2. mktemp_portable()

  • Permet d'obtenir un fichier temporaire portable :
    • teste mktemp "${prefix}.XXXX" (GNU),
    • puis mktemp -t "${prefix}" (BSD/macOS),
    • puis mktemp (fallback),
    • enfin /tmp/<prefix>.$RANDOM en dernier recours.
  • Utilisé pour écrire atomiquement le .htaccess.

3. Sélection de la version PHP

  • Modes acceptés :
    • CLI (-v 74) ;
    • variable d'environnement exportée PHP_VERSION=74 ;
    • saisie interactive.
  • Acceptation des formats 7.4 et 74 (normalisation automatique).
  • Validation stricte : seules certaines versions (52..56, 70..83) sont acceptées — modifiable dans le script.

4. Backup .htaccess

  • Avant toute modification, si .htaccess existe, on le renomme en .htaccess.bak.<YYYYMMDD-HHMMSS> ; si le nom existe déjà on ajoute un suffixe numérique.
  • En --dry-run on affiche l'action sans renommer.

5. Écriture atomique du .htaccess

  • Contenu principal écrit dans un fichier temporaire.
  • Ajout optionnel des règles WordPress si wp-config.php est détecté.
  • mv <tmp> .htaccess pour remplacement atomique.
  • trap mis en place pour supprimer le tmp si le script est interrompu.

6. php.ini

  • Généré avec valeurs par défaut :
    • timezone = Europe/Paris
    • memory_limit = 2048M (modifiable via variable)
    • autres limites (upload, post_max_size, etc.)
  • Les extensions sont commentées pour éviter des erreurs si elles sont absentes.
  • En --dry-run le contenu est affiché sans écrire.

7. Options CLI

  • -n, --dry-run : simule tout, n'écrit rien.
  • -v, --version <ver> : version PHP en ligne de commande.
  • -h, --help : affiche l'aide.
  • Comportement non interactif possible via -v ou PHP_VERSION=74.

🧪 Exemples d'utilisation

  • Mode interactif (avec prompt) :
./prestashop-fix.sh
  • Mode non interactif (version fournie) :
./prestashop-fix.sh -v 74
# ou
PHP_VERSION=74 ./prestashop-fix.sh
  • Dry-run (vérifier avant d'écrire) :
./prestashop-fix.sh -n -v 74

✅ Vérifications effectuées (par l'auteur du patch)

  • Vérification de syntaxe : bash -n prestashop-fix.sh → OK.
  • Test d'exécution dans un répertoire temporaire :
    • Exécution réelle (sans dry-run) dans /tmp/prestashop-fix-test : .htaccess et php.ini créés correctement.
    • Dry-run testé : affiche les actions sans écrire.
  • Test sur macOS : compatibilité mktemp_portable prévue ; attention aux outils système (ex. git peut demander d'accepter la licence Xcode).

⚠️ Points d'attention / risques

  • La directive SetHandler application/x-httpd-php<version> dépend de la configuration de l'hébergeur. Certains hébergeurs utilisent des syntaxes différentes. Vérifier avec l'hébergeur cible.
  • Le suPHP_ConfigPath doit pointer vers un chemin valide. Le script écrit le chemin absolu basé sur le pwd. Si ton chemin contient des espaces ou caractères spéciaux, vérifie la compatibilité avec l'hébergeur.
  • php.ini contient des extensions commentées : si tu décommente une extension qui n'existe pas sur le système, PHP peut émettre des erreurs au démarrage.
  • Valeurs fortes (ex. memory_limit=2048M) peuvent ne pas être autorisées en mutualisé : adapte-les si nécessaire.
  • Sur macOS, certaines commandes utilisateur (ex. git) peuvent demander l’acceptation de la licence Xcode. Le commit Git peut être bloqué jusqu'à acceptation (sudo xcodebuild -license).

🛠️ Bonnes pratiques recommandées

  • Toujours exécuter d'abord en --dry-run sur un environnement de test.
  • S'assurer d'avoir une sauvegarde du site ou snapshot avant modification en production.
  • Vérifier la compatibilité des directives .htaccess avec l'hébergeur (ex: OVH, cPanel, Apache custom).
  • Personnaliser php.ini en fonction de l'environnement (ex. baisser memory_limit en mutualisé).

🧾 Changelog (résumé des commits récents)

  • Ajout de commentaires explicatifs en français dans le script.
  • Ajout mktemp_portable().
  • Ajout des options CLI (--dry-run, -v/--version, --help).
  • Backup horodaté et écriture atomique du .htaccess.
  • Génération de php.ini avec extensions commentées.

🔁 Flux recommandé pour contribution (fork & PR)

  1. Fork du dépôt.
  2. Créer une branche feature/nom (ex. feature/portability-dryrun).
  3. Appliquer modifications et tester localement :
    • bash -n prestashop-fix.sh
    • PHP_VERSION=74 ./prestashop-fix.sh -n
  4. Commit et push vers ton fork.
  5. Ouvrir une Pull Request vers la branche principale du repo source avec une description claire.
  6. Dans la PR, indiquer si tu veux une revue ou un merge automatisé.

Le script a été modifié pour améliorer la portabilité, la robustesse, l'ergonomie, la sécurité opérationnelle et la sûreté au démarrage PHP. Des options CLI ont été ajoutées pour une utilisation plus flexible.[ v1.4.0] Améliorations : rollback, dry-run, compatibilité Linux/macOS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant